#ifndef __PLAYER_H_
#define __PLAYER_H_


#include "VirObj.h"
#include "Prop.h"
class Character;
// 前向声明 Scene 类
class Scene;
class Player : public VirObj
{
public:
    Player(CSrRef name);
    //移动
    void Move(std::shared_ptr<Scene>& s,std::shared_ptr<Scene>& s1,std::shared_ptr<Scene>& s2,std::shared_ptr<Scene>& s3);
    
    //左右最大边界
    DEFINE_MEMBER(MaxWidth, int)
    DEFINE_MEMBER(MaxHeight, int)

    DEFINE_MEMBER(Level, int)
    void LevelUp();

    DEFINE_MEMBER(AttrPoint, int)
    void AttrInterface();

    //背包
    void InsertBag(const PropPtr & ptr);
    void PopBag(int i);
    void showBag();
    std::vector<PropPtr>& Getbag();
    void show();
    int BagSize();
    Weapon *getWeapon();
    Armor *getArmor();
private:
    //背包系统
    std::vector<PropPtr> bag;
    Weapon* w; //武器
    //Potion* p;//药品
    Armor* a;//防具
    

};
class Crit {
public:
    // 构造函数，接收暴击率作为参数
    Crit(float critChance) : critChance(critChance) {
        // 使用随机设备初始化随机数生成器
        rng = std::mt19937(rd());
        // 定义生成随机数的范围（0.0 到 1.0）
        dist = std::uniform_real_distribution<float>(0.0f, 1.0f);
    }

    // 判断是否暴击
    bool isCriticalHit() {
        // 生成一个 0.0 到 1.0 之间的随机浮点数
        float randomValue = dist(rng);
        // 将随机数与暴击率进行比较，决定是否暴击
        return randomValue <= critChance;
    }
private:
    float critChance; // 暴击率（范围从 0.0 到 1.0）
    std::random_device rd; // 随机设备，用于生成种子
    std::mt19937 rng; // 随机数生成器
    std::uniform_real_distribution<float> dist; // 定义随机数的范围
};
class Dodge {
public:
    // 构造函数，接收闪避率作为参数
    Dodge(float dodgeChance) : dodgeChance(dodgeChance) {
        // 使用随机设备初始化随机数生成器
        rng = std::mt19937(rd());
        // 定义生成随机数的范围（0.0 到 1.0）
        dist = std::uniform_real_distribution<float>(0.0f, 1.0f);
    }

    // 判断是否成功闪避
    bool isDodged() {
        // 生成一个 0.0 到 1.0 之间的随机浮点数
        float randomValue = dist(rng);
        // 将随机数与闪避率进行比较，决定是否成功闪避
        return randomValue <= dodgeChance;
    }

private:
    float dodgeChance; // 闪避率（范围从 0.0 到 1.0）
    std::random_device rd; // 随机设备，用于生成种子
    std::mt19937 rng; // 随机数生成器
    std::uniform_real_distribution<float> dist; // 定义随机数的范围
};

#endif